var path = require('path');
var webpack = require("webpack");
var HtmlWebpackPlugin = require('html-webpack-plugin');
var ExtractTextPlugin = require('extract-text-webpack-plugin');
var VueLoaderPlugin = require('vue-loader/lib/plugin');
const devType = process.env.NODE_ENV === 'development';

module.exports = {
    // 入口文件。
    entry:  {
        main: path.resolve(__dirname, "src/main.js"),
    },
    // 打包输出文件。
    output: {
        path: path.join(__dirname, "dist"),    // 用来存放打包后文件的输出目录
        publicPath: '/',       // 指定资源文件引用的目录，如果你的资源存放在CDN上，这里可以填CDN的网址
        filename: "src/pack_[chunkhash].js", 
    },
    module: {
        rules: [
            {
                test: /\.css$/,
                // use: [
                //     'style-loader',
                //     'css-loader',
                //     {
                //         loader: 'postcss-loader',
                //         options: {
                //             plugins: [
                //                 require('autoprefixer')()
                //             ],
                //             exclude: [/node_module/]
                //         }
                //     }
                // ],
                use: ExtractTextPlugin.extract({
                    fallback: "style-loader",
                    use: ["css-loader", {
                        loader: 'postcss-loader',
                        options: {
                            plugins: [
                                require('autoprefixer')()
                            ],
                            exclude: [/node_module/]
                        }
                    }]
                })
            }, {
                test: /\.less$/,
                // use: [
                //     'style-loader',
                //     'css-loader', 
                //     {
                //         loader: 'postcss-loader',
                //         options: {
                //             plugins: [
                //                 require('autoprefixer')()
                //             ],
                //             exclude: [/node_module/]
                //         }
                //     },
                //     'less-loader'
                // ],
                use: ExtractTextPlugin.extract({
                    fallback: "style-loader",
                    use: ["css-loader", {
                        loader: 'postcss-loader',
                        options: {
                            plugins: [
                                require('autoprefixer')()
                            ],
                            exclude: [/node_module/]
                        }
                    }, 'less-loader']
                })
            },{
                test: /\.vue$/,
                loader: 'vue-loader',
                options: {
                    loaders: {
                        css: ExtractTextPlugin.extract({
                            fallback: 'style-loader',
                            use: ['vue-style-loader','css-loader'],
                        })
                    }
                }
            }, {
                test: /\.js$/,
                use: [
                    {
                        loader: 'babel-loader'
                    }
                ],
                exclude: [/node_module/, path.resolve(__dirname, "src/common/")]
            }, {
                // 当遇到.gif、.png、.ttf等格式文件时，url-loader会把它们一起编译到pack目录下，"?limit=1024"是指如果这个文件小于1kb就以base64的形式加载，不会生成一个文件。
                test: /\.(gif|jpg|png|woff|svg|eot|ttf)\??.*$/,
                loader: 'url-loader',
                options: {
                    limit: 256,
                    name: 'assets/imgs/[name].[ext]',
                    esModule: false
                }
            }
        ]
    },
    plugins: [
        // 提取模板，并保留入口html文件。
        new HtmlWebpackPlugin({
            filename: './index.html',
            template: './src/main.html',
            hash: true,     // 是否为所有注入的静态资源添加webpack每次编译产生的唯一hash值，添加hash形式如下所示：<script type="text/javascript" src="common.js?a3e1396b501cdd9041be"></script>
            favicon: './src/assets/favicon.jpg',
            title: null       // 具体作用不太知道
        }),
        new ExtractTextPlugin({
            filename: './[name]_[chunkhash].css',
            allChunks: true,        // 当为false的时候，只会提取初始化的时候引入的css,当allChunks属性为true时，会把异步引入的css也提取出来
        }),
        new VueLoaderPlugin(),
        new webpack.ProvidePlugin({
            'jQuery': 'jquery',
            '$': 'jquery',
        })
    ],
    resolve: {
        extensions: ['.js', '.vue', '.json'],
        alias: {
            '@root': path.resolve(__dirname),
            '@src': path.resolve(__dirname, './src'),
            '@assets': path.resolve(__dirname, './src/assets'),
            '@css': path.resolve(__dirname, './src/assets/css'),
            '@components': path.resolve(__dirname, './src/components'),
            '@doapis': path.resolve(__dirname, './src/doapis'),
            '@common': path.resolve(__dirname, './src/common'),
        }
    }
};